import json
import os
from pathlib import Path
from typing import Union

from build_feature.extract_npm_different_version_functions.core.function_info import FunctionInfo


def write_json(content, file_path: Union[str, Path], **kwargs):
    """Write dict into json file
    Args:
        content: data dict
        file_path: file save path
        **kwargs: other parameters used in open()
    Returns:
        None
    """
    file_path = Path(file_path)
    # 确保目录存在
    os.makedirs(os.path.dirname(file_path), exist_ok=True)
    with file_path.open('wt', **kwargs) as handle:
        json.dump(content, handle, indent=5, sort_keys=True)


def is_not_anonymous(function_info: FunctionInfo) -> bool:
    return not function_info.is_anonymous_function()
# 计算待处理的项目数
# def get_project_folders(target_folder):
#     """
#     获取目标文件夹中的所有项目文件夹路径。
#     组织文件夹以 '@' 开头，组织文件夹内的子文件夹视为项目。
#     其他子文件夹直接视为项目。
#     """
#     projects = []
#
#     for entry in os.scandir(target_folder):
#         if entry.is_dir():
#             if entry.name.startswith('@'):
#                 # 如果是组织文件夹，遍历其内部的项目
#                 for sub_entry in os.scandir(entry.path):
#                     if sub_entry.is_dir():
#                         projects.append(sub_entry.path)
#             else:
#                 # 直接将子文件夹视为项目
#                 projects.append(entry.path)
#
#     return projects
def get_project_folders(target_folder):
    """
    获取目标文件夹中的所有项目文件夹路径。
    组织文件夹以 '@' 开头，组织文件夹内的子文件夹视为项目。
    其他子文件夹直接视为项目。
    """
    projects = []

    for entry in os.scandir(target_folder):
        if entry.is_dir():
            if entry.name.startswith('@'):
                # 组织文件夹：遍历其内部的项目
                for sub_entry in os.scandir(entry.path):
                    if sub_entry.is_dir():
                        projects.append({
                            'path': sub_entry.path,
                            'type': 'org',  # 或 'organization'
                            'org_name': entry.name  # 可选：记录所属组织名
                        })
            else:
                # 独立项目
                projects.append({
                    'path': entry.path,
                    'type': 'standalone'
                })

    return projects


def get_processed_projects(result_path):
    """获取已处理的项目"""
    processed_projects_file = Path(result_path) / 'processed_projects.txt'
    if processed_projects_file.exists():
        with open(processed_projects_file, 'r', encoding='utf-8') as file:
            return set(line.strip() for line in file)
    return set()


# 正确的实现
def record_processed_project(project_path, file_path):
    # file_path 已经是完整的文件路径，例如 "F:\\result\\processed_projects.txt"
    # 直接使用它来打开文件
    with open(file_path, 'a', encoding='utf-8') as f:
        f.write(f"{project_path}\n")


import shutil
def tranverse_packageJson(project_folder,output_folder):

    # 定义源文件路径和目标文件夹路径
    source_file = os.path.join(project_folder, "package.json")
    # 检查源文件是否存在
    if os.path.exists(source_file):
        # 定义目标文件路径
        destination_file = os.path.join(output_folder, "package.json")
        # 复制文件
        shutil.copy2(source_file, destination_file)
        return True
    else:
        return False
